package juc.ThreadDemo;

public class Main {

    /**
     * wait(400)400ml后如果没有人唤醒我 我就自己醒来 执行后面的逻辑
     *
     * @param args arg游戏
     */
    public static void main1(String[] args) {
        Object o = new Object();
        Runnable runnable = ()->{

            synchronized (o) {
                try {
//                    o.wait(3000);
                    o.wait();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                System.out.println("我被唤醒了");
            }

        };
        Thread thread = new Thread(runnable);
        thread.start();

    }

    /**
     * 主线程在等待线程A执行完毕，这个时候线程B打断主线程的等待。 主线程会报异常
     * 总结：如果一个线程在等待别的线程执行完毕 这个时候你打断了 在等待的线程 那么等待线程报异常
     *
     * @param args arg游戏
     * @throws InterruptedException 中断异常
     */
    public static void main(String[] args) throws InterruptedException {
        Thread threadA = new Thread(()->{
            for (; ; ) {

            }
        });
        Thread main = Thread.currentThread();
        Thread threadB = new Thread(()->{
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            main.interrupt();

        });

        threadA.start();
        threadB.start();
        threadA.join();

    }
}
